asc(S1): ASCII value of S1. Returns an integer value in the range 0 to 255 that is the ASCII value of the first character of S1. For example asc("ABC") is 65 because that is the value of the character "A".
chr(A): Character whose ASCII value is A. Returns a single character string. The ASCII value of the character is specified by an integer A which must be in the range 0 to 255. For example chr(70) is the string "F".
concat(S1,S2,[S3...]): Concatenate strings S1 and S2. Returns a string that is the concatenation of all parameter strings. Must have at least 2 parameters but may have more. For example:
If the float value A was 12.34 the result is "Value is 12.3 inches" which is a string.
file_exists(S1): Search for file specified by S1. Attempts to open the file whose name is specified the string S1. The current directory and all directories specified in any Library_Path INI options or +L command line switches are searched. File is immediately closed. Returns a boolean value 1 on success and 0 on failure.
str(A,L,P): Convert float A to formatted string. Returns a formatted string representation of float value A. The float parameter L specifies the minimum length of the string and the type of left padding used if the string's representation is shorter than the minimum. If L is positive then the padding is with blacks. If L is negative then the padding is with zeros. The overall minimum length is of the formatted string is abs(L). If the string needs to be longer, it will be made as long as necessary to represent the value.
str(123.456,0,3) "123.456" str(123.456,4,3) "123.456" str(123.456,9,3) " 123.456" str(123.456,-9,3) "00123.456" str(123.456,0,2) "123.46" str(123.456,0,0) "123" str(123.456,5,0) " 123" str(123.000,7,2) " 123.00" str(123.456,0,-1) "123.456000" (platform specific)
strcmp(S1,S2): Compare string S1 to S2. Returns a float value zero if the strings are equal, a positive number if S1 comes after S2 in the ASCII collating sequence, else a negative number.
strlen(S1): Length of S1. Returns an integer value that is the number of characters in the string S1.
strlwr(S1): Lower case of S1. Returns a new string in which all upper case letters in the string S1 are converted to lower case. The original string is not affected. For example strlwr("Hello There!") results in "hello there!".
substr(S1,P,L): Sub-string from S1. Returns a string that is a subset of the characters in parameter S1 starting at the position specified by the integer value P for a length specified by the integer value L. For example substr("ABCDEFGHI",4,2) evaluates to the string "EF". If P+L>strlen(S1) an error occurs.
strupr(S1): Upper case of S1. Returns a new string in which all lower case letters in the string S1 are converted to upper case. The original string is not affected. For example strlwr("Hello There!") results in "HELLO THERE!".
val(S1): Convert string S1 to float. Returns a float value that is represented by the text in S1. For example val("123.45") is 123.45 as a float.
Each directive begins with the hash character # (often called a number sign or pound sign). It is followed by a keyword and optionally other parameters.
In versions of POV-Ray prior to 3.0, the use of this # character was optional. Language directives could only be used between objects, camera or light_source statements and could not appear within those statements. The exception was the #include which could appear anywhere. Now that all language directives can be used almost anywhere, the # character is mandatory.
The following keywords introduce language directives.
#break #default #statistics #case #else #switch #debug #end #version #declare #render #warning
Earlier versions of POV-Ray considered #max_intersections and #max_trace_level to be language directives but they have been moved to the global_settings statement. Their use as a directive still works but it generates a warning and may be discontinued in the future.
at any point in the input file. The filename may be specified by any valid string expression but it usually is a literal string enclosed in double quotes. It may be up to 40 characters long (or your computer's limit), including the two double-quote (") characters.
The include file is read in as if it were inserted at that point in the file. Using include is the same as actually cutting and pasting the entire contents of this file into your scene.
Include files may be nested. You may have at most 10 nested include files. There is no limit on un-nested include files.
Generally, include files have data for scenes, but are not scenes in themselves. By convention scene files end in .pov and include files end with .inc.
It is legal to specify drive and directory information in the file specification however it is discouraged because it makes scene files less portable between various platforms.
It is typical to put standard include files in a special sub-directory. POV-Ray can only read files in the current directory or one referenced by the Library_Path option (See section "Library Paths" ).
Where IDENTIFIER is the name of the identifier up to 40 characters long and ITEM is any of the following:
Here are some examples.
Declarations, like most language directives, can appear anywhere in the file --- even within other statements. For example:
As this example shows, you can re-declare an identifier and may use previously declared values in that re-declaration. However if you attempt to re-declare an identifier as anything other than its original type, it will generate a warning message.
Declarations may be nested inside each other within limits. In the example in the previous section you could declare the entire union as a object. However for technical reasons you may not use any language directive inside the declaration of floats, vectors or color expressions.
You may change the default texture, pigment, normal or finish using the language directive #default {...} as follows:
Or you may change just part of it like this:
This still changes the pigment of the default texture. At any time there is only one default texture made from the default pigment, normal and finish. The example above does not make a separate default for pigments alone. Note: Special textures tiles and material_map or a texture with a texture_map may not be used as defaults.
You may change the defaults several times throughout a scene as you wish. Subsequent #default statements begin with the defaults that were in effect at the time. If you wish to reset to the original POV-Ray defaults then you should first save them as follows:
later after changing defaults you may restore it with...
If you do not specify a texture for an object then the default texture is attached when the object appears in the scene. It is not attached when an object is declared. For example:
You may force a default texture to be added by using an empty texture statement as follows:
The original POV-Ray defaults for all items are given throughout the documentation under each appropriate section.
The #version language directive is used to change modes within scene files. This switch or INI options only affects the initial setting.
Together with the built-in version identifier, the #version directive allows you to save and restore the previous values of this compatibility setting. For example suppose MYSTUFF.INC is in version 1.0 format. At the top of the file you could put:
Previous versions of POV-Ray would not allow you to change versions inside an object or declaration but that restriction has been lifted for POV-Ray 3.0.
Future versions of POV-Ray may not continue to maintain full backward compatibility even with the #version directive. We strongly encourage you to phase in 3.0 syntax as much as possible.
where (COND) is a float expression that evaluates to a boolean value. A value of 0.0 is false and any non-zero value is true. Note that extremely small values of about 1e-10 are considered zero in case of round off errors. The parentheses around the condition are required. The #else directive is optional. The #end directive is required.
The #else directive is optional. The #end directive is required.
The float expression VALUE following the #switch directive is evaluated and compared to the values in the #case or #range directives. When using #case, it is followed by a float expression TEST_1 in parentheses. It is compared to the VALUE. As usual in POV-Ray, float comparisons are considered equal if their difference is under 1e-10. If the values are equal, parsing continues normally until a #break, #else or #end directive is reached. If the comparison fails, POV-Ray skips until another #case or #range is found.
If you use the #range directive, it is followed by two float expressions LOW_1 and HIGH_1 which are enclosed in parentheses and separated by a comma. If the switch VALUE is in the range specified, then parsing continues normally until a #break, #else or #end directive is reached. If the VALUE is outside the range, the comparison fails and POV-Ray skips until another #case or #range is found.
If no #case or #range succeeds, the #else section is parsed. The #else directive is optional. If no #else is specified and no match succeeds, then parsing resumes after the #end directive.
There may be any number of #case or #range directives in any order you want. If a segment evaluates true but no #break is specified, the parsing will fall through to the next #case or #range and will continue until a #break, #else or #end. Hitting a #break while parsing a successful section causes an immediate jump to the #end so at most, one section of the directive is parsed even if more that one condition would be satisfied.